Aula 1 - Conhecendo o R

Escola de Métodos em Ciência Política

Frederico Bertholini

Abrindo o R e conhecendo o software

Passos iniciais

  • R é software de PROGRAMAÇÃO ESTATÍSTICA

Nota

Tem dividido com o Python o posto de software mais popular entre cientistas sociais

  • Vantagens:
    – Software Livre
    – Documentação completa e acessível
    – Diversidade de arquivos
    – Replicabilidade de rotinas

Um Excel que usou o suco?

  • Se é possível fazer no Excel, é possível fazer no R
  • Entretanto, se é possível fazer no R, não necessariamente é possível fazer no Excel

Ambiente de desenvolvimento para cálculos estatísticos e gráficos

Vários cálculos estatísticos mais sofisticados estão disponíveis no R através de pacotes desenvolvidos pela comunidade

Habilidades necessárias

Escrita:
– Elementos (ex: numeric, character, factor…);
– Funções básicas (ex: sum(), table(), sd());
– Composição do script (ex: c(), for loop);

Leitura:
– Identificação de funções;
– Diferentes soluções;
– Alertas de erros;

Importante

adquirir autonomia com o software

Habilidade mais importante

Dada a multiplicidade de soluções, de alertas de erros e o universo de pacotes com diversas funções

a habilidade mais importante é saber pesquisar no Google

Melhor em inglês pela quantidade de fóruns:

– Melhor fórum: Stackoverflow

Posit Community despontando

Dica

IA como nova ‘habilidade’: além do ChatGPT

RStudio

  • RStudio é um ambiente para desenvolvimento do R (IDE)
  • Ao longo do curso utilizaremos o RStudio
  • Utilizando nada dos botões ou possibilidades específicas do RStudio

Posit (https://posit.co/download/rstudio-desktop/)

Posit Cloud for free

Aparência do RStudio

Aparência

Básico do básico: um operador e um comando

Linhas escritas no ambiente onde se registra o script (Scripts são arquivos de texto)

Ctrl + enter (cmd + enter no mac)

  • Executa (roda) as funções e programações escritas nas linhas selecionadas

Hastags

  • Insere comentários sem gerar outputs (organizar e registrar dentro dos scripts)

Fluxos: scripts e projetos

Como sai no R?

#Insere comentarios sem rodar o comando

Importante para organizar e

# Erro: unexpected symbol in "Importante para"

##Registrar o que se vai fazer ou foi feito

R como calculadora

  • Um função primordial e básica do R, como software estatístico, é de calculadora
  • O R possui os operadores básicos da matemática como ‘+’ , ‘-’, ’*’ e ‘/’
5 + 5
[1] 10
5 - 3
[1] 2
4 * 9
[1] 36
16 / 2
[1] 8

R como calculadora

  • Assim como na matemática, atenção em relação aos ()
(5 + 6) * 3
[1] 33
5 + 6 * 3
[1] 23
  • Além das funções de exponencial e raiz quadrada

  • Respectivamente, ^ e sqrt()

2 ^ 2
[1] 4
sqrt(36)
[1] 6

Lógica

  • O R permite também avaliações lógicas
  • Ou seja, o software possui operadores lógicos afim de fazer testes lógicos com resultados de Verdadeiro ou Falso de acordo com a proposição
  • Os principais operadores são \(==\), \(<\) , \(>\), \(<=\) , \(>=\) e \(!=\)
5 == 5
[1] TRUE
5 <= 5 / 5
[1] FALSE
5 * 4 > 5
[1] TRUE
3 != 6
[1] TRUE

Lógica

  • Testamos também Verdade e Falsidade
TRUE == TRUE
[1] TRUE
TRUE <= FALSE
[1] FALSE
  • Assim como estamos caracteres
"Python" == "python"
[1] FALSE
"Stata" != "Sasta"
[1] TRUE

Operadores lógicos especiais

  • Atenção para os operadores e e ou
  • O primeiro, para ser verdade, precisa que todos os pressupostos sejam verdadeiros
(3 == 3) & (4 != 5)
[1] TRUE
  • O ou, por sua vez, para ser verdade precisa que apenas 1 pressuposto seja verdadeiro
(3 != 3) | (4 != 5)
[1] TRUE

Atribuição

  • Trata-se da famosa ‘setinha’ que indica objetos (valores, vetores, dataframes) para alguma etiqueta
  • Dessa maneira, podemos ‘salvar’ os objetos nas etiquetas para utilizarmos através dessas em qualquer momento ao longo do script
  • Quando utilizadas em operações, as etiquetas representam aquilo que fora atribuído a elas
  • Quando criamos a etiqueta, não geramos outputs, apenas quando rodamos diretamente a etiqueta
sorte <- 5

Regras do uso da setinha

  • Atenção, letras maiúsculas e minúsculas importam
sorte <- 5

Sorte

# Erro: objeto 'Sorte' não encontrado

Regras do uso da setinha

  • Também não podemos criar etiquetas que começam com números
15luck <- 15

# Erro: unexpected symbol in "15luck"

Cuidado com a utilização de etiquetas com o mesmo nome de funções, pode gerar confusão no script

Classes

Em basicamente tudo que iremos fazer no R, a classe da informação importa Em termos elementares, ou ao nível dos valores, existem três grandes classes:
- Numeric (númerico);
- Logical (lógico);
- Character ou factor (caracteres);

Para obter a informação sobre a classe, iremos aprender nossa primeira função no R: class()

Númerico

  • numeric é a classe composta por valores númericos
class(sorte)
[1] "numeric"
  • Objetos deste tipo permitem funções matemáticas como média, mediana etc…

Númerico

  • No caso de valores decimais, utilizamos ponto em vez de vírgula
decimal <- 3,5

# Erro: ',' inesperado in "decimal <- 3,"

decimal <- 3.5

Lógico

  • logical é a classe composta por TRUE, FALSE e NA
vdd <- TRUE

class(vdd)
[1] "logical"
  • Não é preciso escrever sempre TRUE e FALSE, podemos resumir para T e F, respectivamente

  • Por trás dos valores T e F, há valores númericos correspondente a 1 e 0

T + F
[1] 1

Caracteres

  • character é a classe composta por nomes

  • Importante característica é que os nomes devem estar dentro de aspas, caso contrário, o R não reconhecerá como caracter

nome <- "Alvaro"

nome
[1] "Alvaro"
class(nome)
[1] "character"

Caracteres vs Fatores

  • Em termos estatísticos, não há diferença entre caracteres e fatores
  • Fatores apresentam as categorias por dentro de vetor.
  • Em termos de manipulação de dataframes, porém, veremos que esses dois objetos terão tratamento distintos, a começar pela importação da base e a definição de string tratada como factor

Vetores

O que são vetores?

  • Vetores são combinações de valores em uma estrutura unidimensional
  • Ou seja, podem ser combinações de números, valores lógicos, nomes e várias outras possibilidades
  • Por exemplo, combinação de valores pares: 2,4,6,8
  • Ou a combinações de nomes começando por P: Pedro, Paula, Pietro, Paloma
  • Combinação de valores lógico: TRUE, FALSE, TRUE, TRUE

Criação de vetores

  • Para criar vetores é importante combinar valores
  • A função necessária para a criação de vetores é a função c(), c de combine ou concatenate
c(2,4,6,8)
[1] 2 4 6 8
c("Pedro","Paula","Pietro","Paloma")
[1] "Pedro"  "Paula"  "Pietro" "Paloma"
c(TRUE,FALSE,TRUE,FALSE)
[1]  TRUE FALSE  TRUE FALSE

Etiquetas para vetores

  • Assim como fizemos com os valores, atribuímos também etiquetas aos vetores
  • Dessa maneira, podemos trabalhar com as sequências ao longo do script, assim como dar razão ou justificativa aos valores combinados
n.pares <- c(2,4,6,8)

nomes.com.p <- 
c("Pedro","Paula","Pietro","Paloma") 

valores.log <- c(TRUE,FALSE,TRUE,FALSE)

Classes dos vetores

  • Os vetores também possuem classes
  • Essas categorias determinam as operações possíveis dentro de um vetor
  • Para obter a informação sobre a classe de um vetor, utilizamos a função class()
class(n.pares)
[1] "numeric"
class(nomes.com.p)
[1] "character"
class(valores.log)
[1] "logical"

Comprimento de vetores

  • Os vetores podem ser medidos em relação ao seu comprimento
  • O seu comprimento define a extensão do vetor, assim como quantos elementos estão presentes dentro da combinação de valores
  • O comprimento pode ser medido pela função length()
length(n.pares)
[1] 4
length(nomes.com.p)
[1] 4
length(valores.log)
[1] 4

Somatório de vetores

  • Para vetores númerico podemos somar os valores de um vetor
  • A função se chama sum() que corresponde ao \(\sum\)
sum(n.pares)
[1] 20
  • Em vetores com valores lógicos, com TRUE e FALSE, o sum soma o número de T que temos dentro de um vetor
sum(valores.log)
[1] 2

Somatório de vetores

  • A função sum() pode se tornar ainda um contador de um teste
  • Por exemplo, queremos saber quantos nomes são iguais ao de Pedro no vetor ‘nomes.com.p’
teste1 <- nomes.com.p == "Pedro"

sum(teste1)
[1] 1
teste1
[1]  TRUE FALSE FALSE FALSE

Seleção de elementos

  • Queremos selecionar no vetor nomes.com.p o segundo elemento que é Paula
  • Vejamos, primeiro, como se compõe o vetor de caracteres nomes.com.p e a lógica do posicionamento dentro do vetor
nomes.com.p
[1] "Pedro"  "Paula"  "Pietro" "Paloma"

Seleção de elementos

  • Vamos testar se Paula se inclui dentro do vetor sem termos que ver no console
  • As vezes, vetores são maiores do que temos como exemplo
  • Para o teste lógico, utilizamos o operador %in%, que retorna TRUE, caso o valor esteja incluso no vetor
"Paula" %in% nomes.com.p
[1] TRUE

Seleção de elementos

  • Algumas operações se restrigem a determinados elementos ou a um conjunto deles incluso dentro de um vetor
  • Para realizar tais procedimentos precisamos saber escolher elementos
  • Para isso, utilizaremos o operador ‘[]’ depois de apontar o vetor
  • Mais especificamente: Vetor; []; Posição ou regra;

Seleção de elementos

  • Para escolhar Paula, portanto, vamos definir como a segunda posição dentro do vetor
nomes.com.p[2]
[1] "Paula"
  • O posicionamento dos nomes ao longo do vetor determina como seleciona-lo individualmente
  • Porém, podemos selecionar através do valor
nomes.com.p[nomes.com.p == "Paula"]
[1] "Paula"

Seleção de elementos

  • Selecionamos também o último valor do vetor nomes.com.p
  • Sabemos que o vetor possui 4 valores utilizando a função length()
length(nomes.com.p)
[1] 4

Seleção de elementos

  • Assim o último valor é igual a 4
  • Para selecionarmos o último valor, ou definimos como a posição 4 ou apenas o length() do vetor
nomes.com.p[4]
[1] "Paloma"
nomes.com.p[length(nomes.com.p)]
[1] "Paloma"

Seleção de elementos

  • Para seleção de elementos através de regras, podemos utilizar o vetor númerico de n.pares
n.pares  <- c(2,4,6,8)

n.pares
[1] 2 4 6 8
  • O objetivo aqui é selecionar os elementos maiores que 5, que é a mediana do vetor
median(n.pares)
[1] 5

Seleção de elementos

  • Selecionamos, assim, os elementos acima da mediana do vetor n.pares, que são os valores 6 e 8
n.pares[n.pares > 5]
[1] 6 8
  • Ou ainda podemos definir o valor 5 como o valor da mediana
  • O resultado é o mesmo, porém, deixa claro ao leitor do seu script que se trata dos valores acima da mediana do vetor n.pares
n.pares[n.pares > median(n.pares)]
[1] 6 8

Operações matemáticas

Operações com vetores

  • Em vetores numéricos, podemos fazer operações matemáticas a partir do seu posicionamento
  • Vamos calcular o alcance do vetor “n.pares”
#ultimo elemento 
n.pares[length(n.pares)]
[1] 8
#primeiro elemento
n.pares[1]
[1] 2
  • Subtraindo esses dois elementos, temos o alcance do vetor
n.pares[length(n.pares)] - n.pares[1]
[1] 6

Operações com vetores

  • Ainda em vetores numéricos, vamos calcular vetores com regras
  • Selecionamos elementos maiores que 5
n.pares[n.pares >= 5]
[1] 6 8
  • Queremos duplicar os valores inclusos dentro da condição
n.pares[n.pares >= 5] * 2
[1] 12 16
  • Por fim, operacionar um conjunto com um elemento
n.pares[n.pares >= 5] * n.pares[1]
[1] 12 16

Conjuntos

  • Utilizamos a teoria de conjuntos no R com a função de manipular e identificar elementos comuns ou diferente entre vetores
  • Já temos o vetor “n.pares” e vamos criar um vetor com números naturais
n.naturais <- c(0,1,2,3,4,5,6,7,8,9)
n.naturais
 [1] 0 1 2 3 4 5 6 7 8 9
  • Se perguntarmos por valores que não estão no vetor “n.naturais”, o resultado será conjunto vazio
n.naturais[n.naturais == 10]
numeric(0)

Conjuntos

  • Outro ponto importante é saber se os elementos estão contidos dentro de outro vetor
  • A pergunta a se fazer é: os elementos do vetor “n.partidos” está contido no vetor “n.naturais”
  • No R, contidos é igual a %in%
n.pares %in% n.naturais
[1] TRUE TRUE TRUE TRUE

Conjuntos

  • Isto é, o vetor “n.pares” está contido no vetor “n.naturais” e é um subconjunto
  • Outra maneira é utilizando a função is.element()
is.element(n.pares,n.naturais)
[1] TRUE TRUE TRUE TRUE

Conjuntos

  • Para encontrar os valores exclusivos de um conjunto, vamos utilizar a escrita da seleção de elementos
  • Podemos incluir a notação de “!”, que quer dizer diferente
  • Portanto, selecionamos os valores que estão contido no conjunto dos naturais, porém não no conjunto dos valores pares
n.naturais[!is.element(n.naturais,n.pares)]
[1] 0 1 3 5 7 9

Conjuntos

  • Por fim, vamos testar se um valor está presente em um desses vetores
  • Testaremos os valores 1, 11 e 21
1 %in% c(n.naturais,n.pares)
[1] TRUE
11 %in% c(n.naturais,n.pares)
[1] FALSE
21 %in% c(n.naturais,n.pares)
[1] FALSE
  • Assim, não temos os valores 11 e 21 em nenhum dos vetores, entendidos como conjuntos

data.frame

data.frame

  • Um data.frame é o mesmo que uma tabela do SQL ou uma planilha Excel

  • seus dados provavelmente serão importados para um objeto data.frame

  • data.frame’s são listas especiais em que todos os elementos possuem o mesmo comprimento.

  • Cada elemento dessa lista pode ser pensado como uma coluna da tabela - ou como uma variável. Uso do ‘$’

  • Seu comprimento representa o número de linhas - ou seja, de observações

Estrutura de dados - data.frame

data.frame de perto

  • Como data.frames’s são listas, suas colunas podem ser de classes diferentes. Essa é a grande diferença entre data.frame’s e matrizes.

Funções úteis:

head() # Mostra as primeiras 6 linhas.
tail() # Mostra as últimas 6 linhas.
dim() # Número de linhas e de colunas.
names() # Os nomes das colunas (variáveis).
str() # Estrutura do data.frame. Mostra, entre outras coisas, as >classes de cada coluna.
cbind() # Acopla duas tabelas lado a lado.
rbind() # Empilha duas tabelas.